<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>flyingzc's blog</title><meta name="author" content="flyingzc"><meta name="copyright" content="flyingzc"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="不积跬步无以至千里不积小流无以成江海">
<meta property="og:type" content="website">
<meta property="og:title" content="flyingzc&#39;s blog">
<meta property="og:url" content="https://flyingzc.github.io/page/3/index.html">
<meta property="og:site_name" content="flyingzc&#39;s blog">
<meta property="og:description" content="不积跬步无以至千里不积小流无以成江海">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://flyingzc.github.io/images/zc-icon.jpeg">
<meta property="article:author" content="flyingzc">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://flyingzc.github.io/images/zc-icon.jpeg"><link rel="shortcut icon" href="/images/zc-icon.jpeg"><link rel="canonical" href="https://flyingzc.github.io/page/3/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><meta name="google-site-verification" content="DentpX3LnP_WNgEeFnNIcTZZky-Bby-zL-uI_9GqTAw"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css"><script>
    (() => {
      
    const saveToLocal = {
      set: (key, value, ttl) => {
        if (!ttl) return
        const expiry = Date.now() + ttl * 86400000
        localStorage.setItem(key, JSON.stringify({ value, expiry }))
      },
      get: key => {
        const itemStr = localStorage.getItem(key)
        if (!itemStr) return undefined
        const { value, expiry } = JSON.parse(itemStr)
        if (Date.now() > expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return value
      }
    }

    window.btf = {
      saveToLocal,
      getScript: (url, attr = {}) => new Promise((resolve, reject) => {
        const script = document.createElement('script')
        script.src = url
        script.async = true
        Object.entries(attr).forEach(([key, val]) => script.setAttribute(key, val))
        script.onload = script.onreadystatechange = () => {
          if (!script.readyState || /loaded|complete/.test(script.readyState)) resolve()
        }
        script.onerror = reject
        document.head.appendChild(script)
      }),
      getCSS: (url, id) => new Promise((resolve, reject) => {
        const link = document.createElement('link')
        link.rel = 'stylesheet'
        link.href = url
        if (id) link.id = id
        link.onload = link.onreadystatechange = () => {
          if (!link.readyState || /loaded|complete/.test(link.readyState)) resolve()
        }
        link.onerror = reject
        document.head.appendChild(link)
      }),
      addGlobalFn: (key, fn, name = false, parent = window) => {
        if (!false && key.startsWith('pjax')) return
        const globalFn = parent.globalFn || {}
        globalFn[key] = globalFn[key] || {}
        globalFn[key][name || Object.keys(globalFn[key]).length] = fn
        parent.globalFn = globalFn
      }
    }
  
      
      const activateDarkMode = () => {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      const activateLightMode = () => {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }

      btf.activateDarkMode = activateDarkMode
      btf.activateLightMode = activateLightMode

      const theme = saveToLocal.get('theme')
    
          theme === 'dark' ? activateDarkMode() : theme === 'light' ? activateLightMode() : null
        
      
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        document.documentElement.classList.toggle('hide-aside', asideStatus === 'hide')
      }
    
      
    const detectApple = () => {
      if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
  
    })()
  </script><script async="async" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><script>(adsbygoogle = window.adsbygoogle || []).push({
  google_ad_client: '',
  enable_page_level_ads: 'true'
});</script><script>const GLOBAL_CONFIG = {
  root: '/',
  algolia: undefined,
  localSearch: undefined,
  translate: undefined,
  highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false,"highlightFullpage":false,"highlightMacStyle":false},
  copy: {
    success: '复制成功',
    error: '复制失败',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  dateSuffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'null',
  Snackbar: undefined,
  infinitegrid: {
    js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js',
    buttonText: '加载更多'
  },
  isPhotoFigcaption: false,
  islazyloadPlugin: false,
  isAnchor: false,
  percent: {
    toc: true,
    rightside: false,
  },
  autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'flyingzc\'s blog',
  isHighlightShrink: false,
  isToc: false,
  pageType: 'home'
}</script><link rel="stylesheet" href="/self/github-dark.css"><meta name="generator" content="Hexo 7.0.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img text-center"><img src="/images/zc-icon.jpeg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data text-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">84</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">36</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">29</div></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于我</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url(/images/home1.jpg);"><nav id="nav"><span id="blog-info"><a class="nav-site-title" href="/"><span class="site-name">flyingzc's blog</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于我</span></a></div></div><div id="toggle-menu"><span class="site-page"><i class="fas fa-bars fa-fw"></i></span></div></div></nav><div id="site-info"><h1 id="site-title">flyingzc's blog</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/FlyingZC" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts nc" id="recent-posts"><div class="recent-post-items"><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/tool/android/android01-adb.html" title="Android 使用 ADB 调试">Android 使用 ADB 调试</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-07-16T16:00:00.000Z" title="发表于 2024-07-17 00:00:00">2024-07-17</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/ADB/">ADB</a></span></div><div class="content">Android 使用 ADB 调试ADB 安装方式1: 通过 sudo apt install android-tools-adb 安装,试了下版本比较老了,用不起来. 方式2: 按照官网说明下载 Android Studio 或独立的 SDK 平台工具，两者都内含 ADB。下载完成后,配置环境变量. 12# vim ~/.bash_profileexport adb=&quot;/home/flyingzc/Android/Sdk/platform-tools/adb&quot;  手机端设置:1.启用开发者选项2.启用USB调试 使用 ADB 连接手机方式1: USB 连接然后直接通过 usb 连接手机 和 电脑即可。运行 adb devices， 查看连接的设备。 12345➜  ~ adb devices* daemon not running; starting now at tcp:5037* daemon started successfullyList of devices attached5f541edd	device  方式2: wifi...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/omid/omid03-tso.html" title="Apache Omid TSO 组件实现原理">Apache Omid TSO 组件实现原理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-07-01T16:00:00.000Z" title="发表于 2024-07-02 00:00:00">2024-07-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Omid/">Omid</a></span></div><div class="content">Apache Omid TSO 组件实现原理作用独立进程，处理全局事务之间的并发冲突。 流程TSOChannelHandler#channelRead -&gt; AbstractRequestProcessor -&gt; PersistenceProcessorHandler 总体流程123456789thread1    TSOChannelHandler#channelRead        AbstractRequestProcessor#timestampRequest 接收 client 请求，创建 RequestEvent 并 publishthread2    AbstractRequestProcessor#onEvent 处理 RequestEvent 请求        AbstractRequestProcessor#handleRequest            PersistenceProcessorImpl#addTimestampToBatch 创建 PersistEvent,当 batch 满了发送事件thread3   ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/omid/omid02-timestamp-oracle.html" title="Apache Omid Timestamp Oracle 组件实现原理">Apache Omid Timestamp Oracle 组件实现原理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-06-27T16:00:00.000Z" title="发表于 2024-06-28 00:00:00">2024-06-28</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Omid/">Omid</a></span></div><div class="content">Omid Timestamp Oracle 组件实现原理作用生成全局单调递增的时间戳，支持获取操作和崩溃恢复。 功能1234567891011121314151617181920212223241.生成全局单调递增的时间戳(支持崩溃恢复)    api        next            返回下一个时间戳        getLast            返回最后一个分配的时间戳(当前时间戳)    实现方式        TimestampOracleImpl            单调递增的时间戳                在分配时间戳时，如果当前的最大时间戳已经用完，它会触发一个后台任务来更新最大时间戳            next：                分配下一个时间戳。如果当前的最大时间戳已经用完，它会等待后台任务分配新的时间戳        WorldClockOracleImpl            基于世界时间(System.timestamp)生成全局单调递增的时间戳2.存储时间戳    存储方式        in memory...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/tool/termux/termux01-usage.html" title="Android Termux 安装 Git 和 SSH">Android Termux 安装 Git 和 SSH</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-06-01T16:00:00.000Z" title="发表于 2024-06-02 00:00:00">2024-06-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Termux/">Termux</a></span></div><div class="content">Android 使用 Termux 安装 Git 和 SSH背景在 Android 上使用 Git 客户端。可选工具：1.Pocket Git &amp; MGit 客户端2.Termux 安装 Git(选用)下面介绍使用 Termux 安装 Git 和通过 SSH 远程连接 Termux。 1.换源运行 termux-change-repo 命令，通过图形界面替换成 TUNA&#x2F;BFSU 镜像源即可。 2.ssh123456789101112131415161718192021222324# 安装open-sshpkg install openssh# 报错:CANNOT LINK EXECUTABLE &quot;ssh-keygen&quot;: library &quot;libcrypto.so.3&quot; not found: needed by main executable# 解决：安装 openssl1.1-tool。这里必须要指定版本，否则报错 library “libssl.so.1.1“ not foundpkg install...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/omid/omid01-build.html" title="Apache Omid Idea 环境搭建">Apache Omid Idea 环境搭建</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-05-29T16:00:00.000Z" title="发表于 2024-05-30 00:00:00">2024-05-30</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Omid/">Omid</a></span></div><div class="content">IDEA 搭建 Apache Omid 源码 DEBUG 环境Apache Omid 在 Apache HBase 之上提供了多行分布式事务的能力，支持全局 MVCC 功能。简单介绍编译过程。 1.下载 HBase2 并启动https://dlcdn.apache.org/hbase/ 配置环境变量 12export HBASE_HOME=/xxx/hbase-2.4.18export PATH=$PATH:$HBASE_HOME/bin:  2.编译代码编译1git clone https://github.com/apache/phoenix-omid  基于最新的 master af8e377affcd76b1cbde5cab3513731b23bd51fc 编译。 maven 依赖处理有几处编译报错，处理如下： 根 pom 里添加: 12345&lt;dependency&gt;    &lt;groupId&gt;org.glassfish&lt;/groupId&gt;    &lt;artifactId&gt;javax.el&lt;/artifactId&gt;...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/mysql/MySQL%E9%A9%B1%E5%8A%A8add-batch%E4%BC%98%E5%8C%96%E5%AE%9E%E7%8E%B0.html" title="MySQL 驱动 Add Batch 优化实现">MySQL 驱动 Add Batch 优化实现</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-03-25T16:00:00.000Z" title="发表于 2024-03-26 00:00:00">2024-03-26</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/MySQL/">MySQL</a></span></div><div class="content">MySQL 驱动 Add Batch 优化实现MySQL 驱动会在 JDBC URL 添加 rewriteBatchedStatements 参数时，对 batch 操作进行优化。本文测试各种参数组合的行为，并结合驱动代码简单分析。 batch参数组合行为useServerPrepStmts 参数123PreparedStatement psmt = connection.prepareStatement(&quot;DELETE FROM t_order WHERE  `order_id` = ?&quot;);psmt.setObject(1, 1);psmt.execute();  开启:使用服务端预编译，先发送 prepared 语句，再发送 excute 语句 不开启:mysql 驱动会将占位符填充后，明文下发sql. 比如 DELETE FROM t_order WHERE order_id &#x3D; ?; 语句 MySQL 驱动会下发 DELETE FROM t_order WHERE order_id &#x3D; 1; allowMultiQueries...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/shardingsphere/ShardingSphere-SQL%E8%A7%A3%E6%9E%90Issue%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B.html" title="ShardingSphere-SQL 解析 Issue 处理流程">ShardingSphere-SQL 解析 Issue 处理流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-03-04T16:00:00.000Z" title="发表于 2024-03-05 00:00:00">2024-03-05</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/ShardingSphere/">ShardingSphere</a></span></div><div class="content">ShardingSphere-SQL 解析 Issue 处理流程这是之前给社区写的 SQL 解析 Issue 的处理流程，可以帮助社区用户快速参与到 ShardingSphere-SQL 解析当中。 ShardingSphere SQL 解析 issue 列表 Issue 背景说明当前 Issue 使用自定义的爬虫脚本从对应的数据库官网上抓取 SQL Cases，然后交给 ShardingSphere 的解析引擎进行解析。对于解析失败的 SQL Case，每 3~5 条 SQL 作为一个 Issue。  由于是通过爬虫抓取的，所以不保证所有 SQL 本身就是正确的，请按照如下流程处理该 PR。 有些 SQL Case 可能已经在其他 PR 里被修复，对于已经可以执行的 Case 直接留言忽略即可。 如果该 SQL Case 已经可以成功运行，没有任何代码改动，那么不需要添加对应的 Test 断言文件。  总体流程 如果你打算参与该 Issue 的修复，欢迎在 Issue 下方留言，会有社区同学分配该 Issue。  比如留言：Hi, please assign this...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/shardingsphere/ShardingSphere-Narayana-XA%E4%BA%8B%E5%8A%A1%E4%B8%8D%E5%9B%9E%E6%BB%9A%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D.html" title="ShardingSphere Narayana XA 事务不回滚问题定位">ShardingSphere Narayana XA 事务不回滚问题定位</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-02-28T16:00:00.000Z" title="发表于 2024-02-29 00:00:00">2024-02-29</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Transaction/">Transaction</a></span></div><div class="content">ShardingSphere Narayana XA 事务不回滚问题定位问题背景用户反馈，在使用 ShardingSphere + Narayana 执行 XA 事务时，发生报错：java.sql.SQLException: javax.transaction.RollbackException: TransactionImple.enlistResource - ARJUNA016064: The transaction is in an invalid state!。这个报错的含义简单来说就是这个事务已经在其他地方被标记成只可回滚了，不能再进行后续其他的操作。报错信息如下： 12345678910111213141516171819202122Caused by: java.sql.SQLException: javax.transaction.RollbackException: TransactionImple.enlistResource - ARJUNA016064: The transaction is in an invalid state!        at...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/shardingsphere/ShardingSphere-XA%E4%BA%8B%E5%8A%A1%E6%97%A0%E6%B3%95%E6%81%A2%E5%A4%8D%E9%97%AE%E9%A2%98.html" title="ShardingSphere-XA事务无法恢复问题定位">ShardingSphere-XA事务无法恢复问题定位</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-02-27T16:00:00.000Z" title="发表于 2024-02-28 00:00:00">2024-02-28</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Transaction/">Transaction</a></span></div><div class="content">ShardingSphere-XA事务无法恢复问题定位问题背景在测试 ShardingSphere-Proxy 使用达梦数据库开启 XA 事务进行压测期间，kill 掉达梦数据库，等一段时间再重启达梦数据库，最终未完成的 XA 事务无法恢复，数据产生不一致。查看达梦上的 xid 一直有残留，没有被处理。使用 ShardingSphere-Proxy 结合其他主流数据库进行测试时无该问题。 通过日志可以看到在压测期间，挂掉达梦数据库之后，有大量连接报错。节选错误日志如下：比如下面这段日志，在执行 xa end 操作时，因为达梦数据库连接不上，达梦驱动报错如下： 1234567891011121314151617181920212223242526272829[WARN ] 2024-01-29 11:11:19.867 [Connection-82-ThreadExecutor] com.arjuna.ats.jta - ARJUNA016041: prepare on &lt; formatId=131077, gtrid_length=64, bqual_length=36,...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/articles/shardingsphere/ShardingSphere-inline%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D.html" title="ShardingSphere-inline表达式线程安全问题定位">ShardingSphere-inline表达式线程安全问题定位</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-02-26T16:00:00.000Z" title="发表于 2024-02-27 00:00:00">2024-02-27</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/ShardingSphere/">ShardingSphere</a></span></div><div class="content">ShardingSphere inline表达式线程安全问题定位问题背景春节期间发现 ShardingSphere 事务 E2E 偶发执行失败问题，并且每次执行失败需要执行很久，直到超时。最终定位发现 inline 表达式存在线程安全问题。本文记录定位并解决 inline 表达式线程安全问题的过程。 问题原因1.GroovyInlineExpressionParser 里有成员变量，存在并发修改，不能使用单例 SPI 实现;2.执行 Groovy 表达式时，需要执行 rehydrate 方法 copy Closure,使得每个 Closure 都有独立的执行环境，避免属性赋值时产生线程安全问题。 问题定位构造测试用例尝试复现问题构造测试用例，且在测试用例中添加线程相关信息，观察执行结果。 1234567891011121314151617181920212223242526272829@Test@SneakyThrows(&#123;ExecutionException.class, InterruptedException.class&#125;)void...</div></div></div></div><nav id="pagination"><div class="pagination"><a class="extend prev" rel="prev" href="/page/2/#content-inner"><i class="fas fa-chevron-left fa-fw"></i></a><a class="page-number" href="/">1</a><a class="page-number" href="/page/2/#content-inner">2</a><span class="page-number current">3</span><a class="page-number" href="/page/4/#content-inner">4</a><span class="space">&hellip;</span><a class="page-number" href="/page/9/#content-inner">9</a><a class="extend next" rel="next" href="/page/4/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="/images/zc-icon.jpeg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info-name">flyingzc</div><div class="author-info-description">不积跬步无以至千里<br/>不积小流无以成江海</div><div class="site-data"><a href="/archives/"><div class="headline">文章</div><div class="length-num">84</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">36</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">29</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/FlyingZC"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons"><a class="social-icon" href="https://github.com/FlyingZC" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">FlyingZC's Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/ignite/ignite03-transaction-begin.html" title="Apache Ignite 开启事务执行流程">Apache Ignite 开启事务执行流程</a><time datetime="2025-10-10T16:00:00.000Z" title="发表于 2025-10-11 00:00:00">2025-10-11</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/ignite/ignite02-transaction.html" title="Apache Ignite 分布式事务原理">Apache Ignite 分布式事务原理</a><time datetime="2025-09-17T16:00:00.000Z" title="发表于 2025-09-18 00:00:00">2025-09-18</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/ignite/ignite01-build.html" title="Apache Ignite IDEA 环境搭建">Apache Ignite IDEA 环境搭建</a><time datetime="2025-09-10T16:00:00.000Z" title="发表于 2025-09-11 00:00:00">2025-09-11</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/druid/druid01-resultset-leak.html" title="ShardingSphere JDBC 使用 Druid 连接池 ResultSet 内存泄露分析">ShardingSphere JDBC 使用 Druid 连接池 ResultSet 内存泄露分析</a><time datetime="2025-06-30T16:00:00.000Z" title="发表于 2025-07-01 00:00:00">2025-07-01</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/articles/jmeter/jmeter01-shardingsphere.html" title="Jmeter 压测 ShardingSphere">Jmeter 压测 ShardingSphere</a><time datetime="2025-06-30T16:00:00.000Z" title="发表于 2025-07-01 00:00:00">2025-07-01</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
            <i class="fas fa-folder-open"></i>
            <span>分类</span>
            <a class="card-more-btn" href="/categories/" title="查看更多">
      <i class="fas fa-angle-right"></i></a>
          </div>
          <ul class="card-category-list" id="aside-cat-list">
            <li class="card-category-list-item "><a class="card-category-list-link" href="/categories/ADB/"><span class="card-category-list-name">ADB</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/AI/"><span class="card-category-list-name">AI</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Concurrent/"><span class="card-category-list-name">Concurrent</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Coral/"><span class="card-category-list-name">Coral</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Data-Structure/"><span class="card-category-list-name">Data Structure</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Docker/"><span class="card-category-list-name">Docker</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Druid/"><span class="card-category-list-name">Druid</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Dubbo/"><span class="card-category-list-name">Dubbo</span><span class="card-category-list-count">7</span></a></li>
          </ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/MySQL/" style="font-size: 1.1em; color: #999">MySQL</a> <a href="/tags/spring/" style="font-size: 1.1em; color: #999">spring</a> <a href="/tags/Redis/" style="font-size: 1.1em; color: #999">Redis</a> <a href="/tags/Druid/" style="font-size: 1.1em; color: #999">Druid</a> <a href="/tags/Termux/" style="font-size: 1.1em; color: #999">Termux</a> <a href="/tags/H2/" style="font-size: 1.41em; color: #99a5b7">H2</a> <a href="/tags/Ignite/" style="font-size: 1.19em; color: #999da1">Ignite</a> <a href="/tags/Omid/" style="font-size: 1.23em; color: #999ea6">Omid</a> <a href="/tags/Ubuntu-Desktop/" style="font-size: 1.1em; color: #999">Ubuntu Desktop</a> <a href="/tags/ShardingSphere/" style="font-size: 1.23em; color: #999ea6">ShardingSphere</a> <a href="/tags/Dubbo/" style="font-size: 1.37em; color: #99a4b2">Dubbo</a> <a href="/tags/Otter/" style="font-size: 1.1em; color: #999">Otter</a> <a href="/tags/git/" style="font-size: 1.1em; color: #999">git</a> <a href="/tags/Ubuntu/" style="font-size: 1.28em; color: #99a0aa">Ubuntu</a> <a href="/tags/Coral/" style="font-size: 1.14em; color: #999b9d">Coral</a> <a href="/tags/Hotspot/" style="font-size: 1.1em; color: #999">Hotspot</a> <a href="/tags/Docker/" style="font-size: 1.1em; color: #999">Docker</a> <a href="/tags/Concurrent/" style="font-size: 1.1em; color: #999">Concurrent</a> <a href="/tags/SQL-Parse/" style="font-size: 1.1em; color: #999">SQL-Parse</a> <a href="/tags/Spring/" style="font-size: 1.14em; color: #999b9d">Spring</a> <a href="/tags/Zookeeper/" style="font-size: 1.46em; color: #99a7bb">Zookeeper</a> <a href="/tags/SpringBoot/" style="font-size: 1.1em; color: #999">SpringBoot</a> <a href="/tags/Maven/" style="font-size: 1.1em; color: #999">Maven</a> <a href="/tags/Linux/" style="font-size: 1.28em; color: #99a0aa">Linux</a> <a href="/tags/Tool/" style="font-size: 1.14em; color: #999b9d">Tool</a> <a href="/tags/Database/" style="font-size: 1.41em; color: #99a5b7">Database</a> <a href="/tags/Data-Structure/" style="font-size: 1.1em; color: #999">Data Structure</a> <a href="/tags/Tomcat/" style="font-size: 1.32em; color: #99a2ae">Tomcat</a> <a href="/tags/Paddle/" style="font-size: 1.1em; color: #999">Paddle</a> <a href="/tags/ADB/" style="font-size: 1.1em; color: #999">ADB</a> <a href="/tags/springboot/" style="font-size: 1.23em; color: #999ea6">springboot</a> <a href="/tags/Android/" style="font-size: 1.1em; color: #999">Android</a> <a href="/tags/Jmeter/" style="font-size: 1.1em; color: #999">Jmeter</a> <a href="/tags/Transaction/" style="font-size: 1.5em; color: #99a9bf">Transaction</a> <a href="/tags/Narayana/" style="font-size: 1.41em; color: #99a5b7">Narayana</a> <a href="/tags/Percolator/" style="font-size: 1.1em; color: #999">Percolator</a></div></div><div class="card-widget card-archives">
    <div class="item-headline">
      <i class="fas fa-archive"></i>
      <span>归档</span>
      <a class="card-more-btn" href="/archives/"
            title="查看更多">
            <i class="fas fa-angle-right"></i>
          </a>
    </div>
  
    <ul class="card-archive-list">
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2025/10/">
            <span class="card-archive-list-date">
              十月 2025
            </span>
            <span class="card-archive-list-count">1</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2025/09/">
            <span class="card-archive-list-date">
              九月 2025
            </span>
            <span class="card-archive-list-count">2</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2025/07/">
            <span class="card-archive-list-date">
              七月 2025
            </span>
            <span class="card-archive-list-count">3</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2025/04/">
            <span class="card-archive-list-date">
              四月 2025
            </span>
            <span class="card-archive-list-count">1</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2025/03/">
            <span class="card-archive-list-date">
              三月 2025
            </span>
            <span class="card-archive-list-count">1</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2024/11/">
            <span class="card-archive-list-date">
              十一月 2024
            </span>
            <span class="card-archive-list-count">1</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2024/10/">
            <span class="card-archive-list-date">
              十月 2024
            </span>
            <span class="card-archive-list-count">4</span>
          </a>
        </li>
      
        <li class="card-archive-list-item">
          <a class="card-archive-list-link" href="/archives/2024/09/">
            <span class="card-archive-list-date">
              九月 2024
            </span>
            <span class="card-archive-list-count">2</span>
          </a>
        </li>
      
    </ul>
  </div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站信息</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">84</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总浏览量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2025-10-17T05:07:18.627Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">&copy;2020 - 2025 By flyingzc</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="日间和夜间模式切换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>